[Python]日付を操作する(月末・月初・Nヶ月後など) 您所在的位置:网站首页 python 月末 [Python]日付を操作する(月末・月初・Nヶ月後など)

[Python]日付を操作する(月末・月初・Nヶ月後など)

2023-09-26 11:38| 来源: 网络整理| 查看: 265

Python でプログラミングしてると、日付の操作をすることがよくあったので、その時の実装手段を色々まとめてみました。

月初を求める

月の1日を計算します。これ自体はそんなに難しくありません。 Python の標準モジュールの datetime モジュールを使用します。

import datetime d = datetime.date(2018, 5, 1) print(d) # 2018-05-01月末を求める

月末を計算するにはちょっとテクニックが必要です。うるう年とか末日が30日とか31日だったりを考慮しないといけないので、計算したい月の末日がいつかを計算してくれる calendar モジュールを利用します。 calendar モジュールの monthrange メソッドを使うと対象の月の日付の幅(1〜末日)をタプルで返却してくれます。

import calendar month_range = calendar.monthrange(2018, 5) print(month_range) # (1, 31) # 要素を指定すれば末日だけ取得できます print(month_range[1]) #31 # うるう年でもちゃんと末日を取得してくれます month_range = calendar.monthrange(2020, 2)[1] print(month_range) # 29

この、 calendar モジュールの monthrange メソッドと datetime モジュールを組み合わせてあげると末日を取得することができます。

import calendar import datetime y = 2020 m = 2 date = datetime.date(y, m, calendar.monthrange(y, m)[1]) print(date) # 2020-02-29Nヶ月後を求める

python-dateutil というモジュールを利用します。標準ライブラリではないので、 pip install する必要があります。

$ pip install python-dateutil

python-dateutil を使うことで、日付の加算・減算処理を行うことができるようになります。

いくつか参考に記述していきます。

from dateutil.relativedelta import relativedelta date = datetime.date(2018, 5, 1) print(date) # 2018-05-01 # 1ヶ月後を求める print(date + relativedelta(months=1)) # 2018-06-01 # 1ヶ月前を求める print(date + relativedelta(months=-1)) # 2018-04-01 # 1日後を求める print(date + relativedelta(days=1)) # 2018-05-02 # 1日前を求める print(date + relativedelta(days=-1)) # 2018-04-30 # 1年後を求める print(date + relativedelta(years=1)) # 2019-05-01 # 1年前を求める print(date + relativedelta(years=-1)) # 2017-05-01

もちろん複合的な計算もできます。

from dateutil.relativedelta import relativedelta date = datetime.date(2018, 5, 1) print(date) # 2018-05-01 # 1年1ヶ月後の1日前を求める print(date + relativedelta(years=1, months=1, days=-1)) # 2019-05-31最後に

月末・月初の計算は標準ライブラリを活用すれば良いですが、日付の細かい演算は python-dateutil モジュールを使わないとかなり処理が面倒になると思うので、積極的に使っていきたいですね。システム開発をしていると日付を操作することがよくあるので、日付の計算方法はぜひおさえておいてもらえればと思います。そうすることで、より効率的なプログラミングができるようになると思います。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有